home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 9 / QRZ Ham Radio Callsign Database - Volume 9.iso / mac / files / sat / geosynch.bas < prev    next >
BASIC Source File  |  1996-06-24  |  6KB  |  180 lines

  1. Date: Mon, 14 Dec 87 10:29:53 est
  2. From: allegra!ulysses!sfmag!sfsup!sfmin!martyf@EDDIE.MIT.EDU
  3. Subject: Satellite Tracking Program Submission
  4.  
  5. Enclosed is a basic program that calculates the azimuth and elevation 
  6. for satellite tracking systems.  The source of this program is unknown, 
  7. however it appears to do the job.
  8.  
  9. Marty Fleming
  10. attunix!martyf
  11. 201 522 5001
  12. -------------cut here----------------
  13.  
  14. 0      GOTO 10'geosynch
  15. 1 CHAIN "ENTRY":RETURN
  16. 10 ON KEY(1) GOSUB 1
  17. 20 ' **     GEOSYNCH     **
  18. 30 ' **********************
  19. 50 CLEAR :SCREEN 2:CLS:KEY OFF
  20. 90 OPTION BASE 1
  21. 100 DIM AZIMUTH(360),ELEVATION(360)
  22. 110 DIM VLINE(39)
  23. 120 '
  24. 130 ' Create vertical line for use later
  25. 140 LINE (0,0)-(0,150)
  26. 150 GET (0,0)-(0,150),VLINE
  27. 160 '
  28. 170 ' Define radian and degree conversion functions
  29. 180 DEGREESPERRADIAN = 57.29578
  30. 190 DEF FNRAD(DEGREES) = DEGREES/DEGREESPERRADIAN
  31. 200 DEF FNDEG(RADIANS) = RADIANS*DEGREESPERRADIAN
  32. 210 '
  33. 220 ' Define ARC COS function
  34. 230 DEF FNACS(X) = 1.570796-ATN(X/SQR(1-X*X))
  35. 240 '
  36. 250 ' Get antenna latitude and longitude from user
  37. 260 ' Also ask for output guidance (printer or not)
  38. 270 CLS
  39. 280 LOCATE 3,15
  40. 290 PRINT "* * *  GEOSYNCHRONOUS SATELLITE ANTENNA AIM  * * *"
  41. 300 LOCATE 8,1
  42. 310 PRINT "Latitude (-90 to 90) is positive in the northern hemisphere ...
  43. 320 LOCATE 10,1
  44. 330 INPUT "Enter the latitude of the antenna location ";LATITUDE
  45. 340 LOCATE 13,1
  46. 350 PRINT "Longitude (-180 to 180) is positive in the western hemisphere ..."
  47. 360 LOCATE 15,1
  48. 370 INPUT "Enter the longitude of the antenna location ";LONGITUDE
  49. 380 LOCATE 18,9
  50. 390 PRINT "1.  Screen chart only.
  51. 400 LOCATE 19,9
  52. 410 PRINT "2.  Printed table also. (Must have printer ready).
  53. 420 LOCATE 22,1
  54. 430 PRINT "Press the appropriate number key, '1' or '2' ...
  55. 440 K$ = INKEY$
  56. 450 IF K$ <> "1" AND K$ <> "2" THEN 440
  57. 460 IF K$ = "2" THEN TABLEFLAG = 1 ELSE TABLEFLAG = 0
  58. 470 '
  59. 480 ' Build screen chart
  60. 490 CLS
  61. 500 LOCATE 1,10
  62. 510 PRINT "* * *  GEOSYNCHRONOUS SATELLITE ANTENNA AIM  * * * (Esc to exit)"
  63. 520 LOCATE 6,60
  64. 530 PRINT "Antenna Location";
  65. 540 LOCATE 8,60
  66. 550 PRINT USING "Latitude  ###.##";LATITUDE;
  67. 560 LOCATE 9,60
  68. 570 PRINT USING "longitude ###.##";LONGITUDE;
  69. 580 LOCATE 13,60
  70. 590 PRINT "Satellite";
  71. 600 LOCATE 14,60
  72. 610 PRINT "longitude";
  73. 620 LOCATE 18,60
  74. 630 PRINT "Antenna aim";
  75. 640 LOCATE 20,60
  76. 650 PRINT "Azimuth";
  77. 660 LOCATE 21,60
  78. 670 PRINT "Elevation";
  79. 680 LINE (100,190)-(461,40),,B
  80. 690 LOCATE 25,14
  81. 700 PRINT "Satellite equatorial longitude (-180 to +180)";
  82. 710 '
  83. 720 ' Loop to put 12 words vertically on left
  84. 730 FOR I = 1 TO 12
  85. 740 LOCATE 5+I,1
  86. 750 READ A$
  87. 760 PRINT A$;
  88. 770 NEXT I
  89. 780 DATA Antenna,aiming,curves,"","","",""
  90. 790 DATA Azimuth,-90 to +90,""
  91. 800 DATA Elevation,0 to 90
  92. 810 '
  93. 820 ' Some of the math can be done just once to save time
  94. 830 EARTH = 6367
  95. 840 ORBIT = 42200!
  96. 850 EARTH2 = EARTH * EARTH
  97. 860 ORBIT2 = ORBIT * ORBIT
  98. 870 FACTOR = 2 * ORBIT * EARTH * COS(FNRAD(LATITUDE))
  99. 880 SINLAT = SIN(FNRAD(LATITUDE))
  100. 890 '
  101. 900 ' Compute antenna aim for 360 satellite locations
  102. 910 FOR SATLONG = 1 TO 360
  103. 920 PUT (SATLONG+101,40),VLINE,XOR
  104. 930 LONGDIFF = FNRAD(SATLONG - LONGITUDE - 180)
  105. 940 TERM1 = SQR(EARTH2 + ORBIT2 - FACTOR * COS(LONGDIFF))
  106. 950 TERM2 = TERM1 * TERM1
  107. 960 TERM3 = (TERM2 + EARTH2 - ORBIT2) / (2 * TERM1 * EARTH)
  108. 970 TERM4 = TAN(LONGDIFF) / SINLAT
  109. 980 AZIMUTH(SATLONG) = FNDEG(ATN(TAN(LONGDIFF)/SINLAT))
  110. 990 ELEVATION(SATLONG) = FNDEG(FNACS(TERM3)) - 90
  111. 1000 GOSUB 1590
  112. 1010 IF ELEVATION(SATLONG) < 0 THEN 1080
  113. 1020 '(Else plot the points on the chart)
  114. 1030 XP = SATLONG + 100
  115. 1040 YA = -15 * AZIMUTH(SATLONG) / 18 + 115
  116. 1050 YE = -15 * ELEVATION(SATLONG) / 9 + 190
  117. 1060 PSET (XP,YA)
  118. 1070 PSET (XP,YE)
  119. 1080 PUT (SATLONG+101,40),VLINE,XOR  'Erases line but not background
  120. 1090 NEXT SATLONG
  121. 1100 '
  122. 1110 ' Put line at peak elevation point on chart
  123. 1120 LOCATE 2,34
  124. 1130 PRINT SPACE$(11);
  125. 1140 SATLONG = CVI(MKI$(LONGITUDE + 180))
  126. 1150 GOSUB 1590
  127. 1160 PUT (SATLONG+100,40),VLINE,XOR
  128. 1170 IF TABLEFLAG = 0 THEN 1380
  129. 1180 '
  130. 1190 ' Output table to printer
  131. 1200 LPRINT TAB(15)"* * *  GEOSYNCHRONOUS SATELLITE ANTENNA AIM  * * *"
  132. 1210 LPRINT STRING$(2,10)
  133. 1220 LPRINT USING "Antenna latitude  ###.##";LATITUDE
  134. 1230 LPRINT USING "Antenna longitude ###.##";LONGITUDE
  135. 1240 LPRINT STRING$(3,10)
  136. 1250 LPRINT TAB(9)"Satellite"TAB(27)"Antenna"TAB(36)"Antenna"
  137. 1260 LPRINT TAB(9)"Longitude"TAB(27)"Azimuth"TAB(36)"Elevation"
  138. 1270 LPRINT STRING$(80,"-");
  139. 1280 FORMAT$ = SPACE$(10) + "######" + SPACE$(11)
  140. 1290 FORMAT$ = FORMAT$ + "###.##   ###.##"
  141. 1300 FOR LLONG = 1 TO 360
  142. 1310 IF ELEVATION(LLONG) <= 0 THEN 1330
  143. 1320 LPRINT USING FORMAT$;LLONG-180,AZIMUTH(LLONG),ELEVATION(LLONG)
  144. 1330 NEXT LLONG
  145. 1340 LPRINT CHR$(12);
  146. 1350 TABLEFLAG = 0
  147. 1360 '
  148. 1370 ' Manual scroll through screen chart
  149. 1380 LOCATE 4,17
  150. 1390 PRINT "Use '+' or '-' to scroll through chart"
  151. 1400 '
  152. 1410 K$ = INKEY$
  153. 1415 IF K$=CHR$(27) THEN CLS:END
  154. 1420 IF K$ <> "" THEN 1460 ELSE GOSUB 1590
  155. 1430 GOTO 1410
  156. 1440 '
  157. 1450 ' Move line left one notch
  158. 1460 IF K$ <> "-" THEN 1530
  159. 1470 PUT (SATLONG+100,40),VLINE,XOR
  160. 1480 SATLONG = SATLONG - 1
  161. 1490 IF SATLONG < 1 THEN SATLONG = 360
  162. 1500 GOTO 1160
  163. 1510 '
  164. 1520 ' Move line right one notch
  165. 1530 IF K$ <> "+" THEN 1410
  166. 1540 PUT (SATLONG+100,40),VLINE,XOR
  167. 1550 SATLONG = SATLONG MOD 360 + 1
  168. 1560 GOTO 1160
  169. 1570 '
  170. 1580 ' Subroutine to update numbers on screen
  171. 1590 LOCATE 14,72
  172. 1600 PRINT USING "####";SATLONG - 180
  173. 1610 LOCATE 20,70
  174. 1620 IF ELEVATION(SATLONG) >= 0 THEN PRINT USING "###.##";AZIMUTH(SATLONG);
  175. 1630 IF ELEVATION(SATLONG) < 0 THEN PRINT "------";
  176. 1640 LOCATE 21,70
  177. 1650 IF ELEVATION(SATLONG) >= 0 THEN PRINT USING "###.##";ELEVATION(SATLONG);
  178. 1660 IF ELEVATION(SATLONG) < 0 THEN PRINT "------";
  179. 1670 RETURN
  180.